package com.premize.grco.movil.control;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.premize.grco.dataaccess.daoFactory.XMLHibernateDaoFactory;
import com.premize.grco.dataaccess.sessionFactory.HibernateSessionFactory;
import com.premize.grco.exceptions.ExceptionManager;
import com.premize.grco.exceptions.ExceptionMessages;
import com.premize.grco.movil.GrcoCliente;
import com.premize.grco.movil.GrcoPedido;
import com.premize.grco.utilities.Utilities;


/**
* interface GrcoClienteLogic
* @author Zathura Code Generator http://code.google.com/p/zathura
*
*/
public class GrcoClienteLogic implements IGrcoClienteLogic {
    public List<GrcoCliente> getGrcoCliente() throws Exception {
        List<GrcoCliente> list = new ArrayList<GrcoCliente>();

        try {
            list = XMLHibernateDaoFactory.getInstance().getGrcoClienteDAO()
                                         .findAll();
        } catch (Exception e) {
            throw new Exception(ExceptionManager.getInstance()
                                                .exceptionInGetAll());
        } finally {
            HibernateSessionFactory.closeSession();
        }

        return list;
    }

    public void saveGrcoCliente(String barrio, Long ciudad, String codigo,
        Long consCliente, Long departamento, String direccion, String email,
        String fechaCreacion, Date fechaModificacion,
        Long indicadorAutoretenedor, String localidad, Long modificadoMovil,
        String numeroIdentificacion, Long pais, String razonSocial,
        String telefono1, String telefono2, Long tipoIdentificacion,
        Long tipoPersoneria, String usuarioCreacion, String usuarioModificacion)
        throws Exception {
        GrcoCliente entity = null;

        try {
            if ((barrio != null) &&
                    (Utilities.checkWordAndCheckWithlength(barrio, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "barrio");
            }

            if (ciudad == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL + "ciudad");
            }

            if ((ciudad != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        ciudad, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "ciudad");
            }

            if (codigo == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL + "codigo");
            }

            if ((codigo != null) &&
                    (Utilities.checkWordAndCheckWithlength(codigo, 20) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "codigo");
            }

            if (consCliente == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "consCliente");
            }

            if ((consCliente != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        consCliente, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "consCliente");
            }

            if (departamento == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "departamento");
            }

            if ((departamento != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        departamento, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "departamento");
            }

            if (direccion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "direccion");
            }

            if ((direccion != null) &&
                    (Utilities.checkWordAndCheckWithlength(direccion, 250) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "direccion");
            }

            if ((email != null) &&
                    (Utilities.checkWordAndCheckWithlength(email, 50) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "email");
            }

            if (fechaCreacion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "fechaCreacion");
            }

            if ((fechaCreacion != null) &&
                    (Utilities.checkWordAndCheckWithlength(fechaCreacion, 10) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "fechaCreacion");
            }

            if (indicadorAutoretenedor == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "indicadorAutoretenedor");
            }

            if ((indicadorAutoretenedor != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        indicadorAutoretenedor, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "indicadorAutoretenedor");
            }

            if ((localidad != null) &&
                    (Utilities.checkWordAndCheckWithlength(localidad, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "localidad");
            }

            if ((modificadoMovil != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        modificadoMovil, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "modificadoMovil");
            }

            if (numeroIdentificacion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "numeroIdentificacion");
            }

            if ((numeroIdentificacion != null) &&
                    (Utilities.checkWordAndCheckWithlength(
                        numeroIdentificacion, 20) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "numeroIdentificacion");
            }

            if (pais == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL + "pais");
            }

            if ((pais != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        pais, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH + "pais");
            }

            if (razonSocial == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "razonSocial");
            }

            if ((razonSocial != null) &&
                    (Utilities.checkWordAndCheckWithlength(razonSocial, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "razonSocial");
            }

            if (telefono1 == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "telefono1");
            }

            if ((telefono1 != null) &&
                    (Utilities.checkWordAndCheckWithlength(telefono1, 20) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "telefono1");
            }

            if ((telefono2 != null) &&
                    (Utilities.checkWordAndCheckWithlength(telefono2, 20) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "telefono2");
            }

            if (tipoIdentificacion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "tipoIdentificacion");
            }

            if ((tipoIdentificacion != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        tipoIdentificacion, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "tipoIdentificacion");
            }

            if (tipoPersoneria == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "tipoPersoneria");
            }

            if ((tipoPersoneria != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        tipoPersoneria, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "tipoPersoneria");
            }

            if (usuarioCreacion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "usuarioCreacion");
            }

            if ((usuarioCreacion != null) &&
                    (Utilities.checkWordAndCheckWithlength(usuarioCreacion, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "usuarioCreacion");
            }

            if ((usuarioModificacion != null) &&
                    (Utilities.checkWordAndCheckWithlength(
                        usuarioModificacion, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "usuarioModificacion");
            }

            entity = getGrcoCliente(consCliente);

            if (entity != null) {
                throw new Exception(ExceptionMessages.ENTITY_WITHSAMEKEY);
            }

            entity = new GrcoCliente();
            entity.setBarrio(barrio);
            entity.setCiudad(ciudad);
            entity.setCodigo(codigo);
            entity.setConsCliente(consCliente);
            entity.setDepartamento(departamento);
            entity.setDireccion(direccion);
            entity.setEmail(email);
            entity.setFechaCreacion(fechaCreacion);
            entity.setFechaModificacion(fechaModificacion);
            entity.setIndicadorAutoretenedor(indicadorAutoretenedor);
            entity.setLocalidad(localidad);
            entity.setModificadoMovil(modificadoMovil);
            entity.setNumeroIdentificacion(numeroIdentificacion);
            entity.setPais(pais);
            entity.setRazonSocial(razonSocial);
            entity.setTelefono1(telefono1);
            entity.setTelefono2(telefono2);
            entity.setTipoIdentificacion(tipoIdentificacion);
            entity.setTipoPersoneria(tipoPersoneria);
            entity.setUsuarioCreacion(usuarioCreacion);
            entity.setUsuarioModificacion(usuarioModificacion);
            HibernateSessionFactory.beginTransaction();
            XMLHibernateDaoFactory.getInstance().getGrcoClienteDAO().save(entity);
            HibernateSessionFactory.commit();
        } catch (Exception e) {
            HibernateSessionFactory.rollback();
            throw e;
        } finally {
            HibernateSessionFactory.closeSession();
        }
    }

    public void deleteGrcoCliente(Long consCliente) throws Exception {
        GrcoCliente entity = null;

        if (consCliente == null) {
            throw new Exception(ExceptionMessages.VARIABLE_NULL);
        }

        List<GrcoPedido> grcoPedidos = null;
        entity = getGrcoCliente(consCliente);

        if (entity == null) {
            throw new Exception(ExceptionMessages.ENTITY_NULL);
        }

        try {
            grcoPedidos = XMLHibernateDaoFactory.getInstance().getGrcoPedidoDAO()
                                                .findByProperty("grcoCliente.consCliente",
                    consCliente);

            if (Utilities.validationsList(grcoPedidos) == false) {
                throw new Exception(ExceptionManager.getInstance()
                                                    .exceptionDeletingEntityWithChild());
            }

            HibernateSessionFactory.beginTransaction();
            XMLHibernateDaoFactory.getInstance().getGrcoClienteDAO()
                                  .delete(entity);
            HibernateSessionFactory.commit();
        } catch (Exception e) {
            HibernateSessionFactory.rollback();
            throw e;
        } finally {
            HibernateSessionFactory.closeSession();
        }
    }

    public void updateGrcoCliente(String barrio, Long ciudad, String codigo,
        Long consCliente, Long departamento, String direccion, String email,
        String fechaCreacion, Date fechaModificacion,
        Long indicadorAutoretenedor, String localidad, Long modificadoMovil,
        String numeroIdentificacion, Long pais, String razonSocial,
        String telefono1, String telefono2, Long tipoIdentificacion,
        Long tipoPersoneria, String usuarioCreacion, String usuarioModificacion)
        throws Exception {
        GrcoCliente entity = null;

        try {
            if ((barrio != null) &&
                    (Utilities.checkWordAndCheckWithlength(barrio, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "barrio");
            }

            if (ciudad == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL + "ciudad");
            }

            if ((ciudad != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        ciudad, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "ciudad");
            }

            if (codigo == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL + "codigo");
            }

            if ((codigo != null) &&
                    (Utilities.checkWordAndCheckWithlength(codigo, 20) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "codigo");
            }

            if (consCliente == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "consCliente");
            }

            if ((consCliente != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        consCliente, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "consCliente");
            }

            if (departamento == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "departamento");
            }

            if ((departamento != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        departamento, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "departamento");
            }

            if (direccion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "direccion");
            }

            if ((direccion != null) &&
                    (Utilities.checkWordAndCheckWithlength(direccion, 250) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "direccion");
            }

            if ((email != null) &&
                    (Utilities.checkWordAndCheckWithlength(email, 50) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "email");
            }

            if (fechaCreacion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "fechaCreacion");
            }

            if ((fechaCreacion != null) &&
                    (Utilities.checkWordAndCheckWithlength(fechaCreacion, 10) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "fechaCreacion");
            }

            if (indicadorAutoretenedor == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "indicadorAutoretenedor");
            }

            if ((indicadorAutoretenedor != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        indicadorAutoretenedor, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "indicadorAutoretenedor");
            }

            if ((localidad != null) &&
                    (Utilities.checkWordAndCheckWithlength(localidad, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "localidad");
            }

            if ((modificadoMovil != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        modificadoMovil, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "modificadoMovil");
            }

            if (numeroIdentificacion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "numeroIdentificacion");
            }

            if ((numeroIdentificacion != null) &&
                    (Utilities.checkWordAndCheckWithlength(
                        numeroIdentificacion, 20) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "numeroIdentificacion");
            }

            if (pais == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL + "pais");
            }

            if ((pais != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        pais, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH + "pais");
            }

            if (razonSocial == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "razonSocial");
            }

            if ((razonSocial != null) &&
                    (Utilities.checkWordAndCheckWithlength(razonSocial, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "razonSocial");
            }

            if (telefono1 == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "telefono1");
            }

            if ((telefono1 != null) &&
                    (Utilities.checkWordAndCheckWithlength(telefono1, 20) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "telefono1");
            }

            if ((telefono2 != null) &&
                    (Utilities.checkWordAndCheckWithlength(telefono2, 20) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "telefono2");
            }

            if (tipoIdentificacion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "tipoIdentificacion");
            }

            if ((tipoIdentificacion != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        tipoIdentificacion, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "tipoIdentificacion");
            }

            if (tipoPersoneria == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "tipoPersoneria");
            }

            if ((tipoPersoneria != null) &&
                    (Utilities.checkNumberAndCheckWithPrecisionAndScale("" +
                        tipoPersoneria, 10, 0) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "tipoPersoneria");
            }

            if (usuarioCreacion == null) {
                throw new Exception(ExceptionMessages.VARIABLE_NULL +
                    "usuarioCreacion");
            }

            if ((usuarioCreacion != null) &&
                    (Utilities.checkWordAndCheckWithlength(usuarioCreacion, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "usuarioCreacion");
            }

            if ((usuarioModificacion != null) &&
                    (Utilities.checkWordAndCheckWithlength(
                        usuarioModificacion, 100) == false)) {
                throw new Exception(ExceptionMessages.VARIABLE_LENGTH +
                    "usuarioModificacion");
            }

            entity = getGrcoCliente(consCliente);

            if (entity == null) {
                throw new Exception(ExceptionMessages.ENTITY_NOENTITYTOUPDATE);
            }

            entity.setBarrio(barrio);
            entity.setCiudad(ciudad);
            entity.setCodigo(codigo);
            entity.setConsCliente(consCliente);
            entity.setDepartamento(departamento);
            entity.setDireccion(direccion);
            entity.setEmail(email);
            entity.setFechaCreacion(fechaCreacion);
            entity.setFechaModificacion(fechaModificacion);
            entity.setIndicadorAutoretenedor(indicadorAutoretenedor);
            entity.setLocalidad(localidad);
            entity.setModificadoMovil(modificadoMovil);
            entity.setNumeroIdentificacion(numeroIdentificacion);
            entity.setPais(pais);
            entity.setRazonSocial(razonSocial);
            entity.setTelefono1(telefono1);
            entity.setTelefono2(telefono2);
            entity.setTipoIdentificacion(tipoIdentificacion);
            entity.setTipoPersoneria(tipoPersoneria);
            entity.setUsuarioCreacion(usuarioCreacion);
            entity.setUsuarioModificacion(usuarioModificacion);
            HibernateSessionFactory.beginTransaction();
            XMLHibernateDaoFactory.getInstance().getGrcoClienteDAO()
                                  .update(entity);
            HibernateSessionFactory.commit();
        } catch (Exception e) {
            HibernateSessionFactory.rollback();
            throw e;
        } finally {
            HibernateSessionFactory.closeSession();
        }
    }

    public GrcoCliente getGrcoCliente(Long consCliente)
        throws Exception {
        GrcoCliente entity = null;

        try {
            entity = XMLHibernateDaoFactory.getInstance().getGrcoClienteDAO()
                                           .findById(consCliente);
        } catch (Exception e) {
            throw new Exception(ExceptionManager.getInstance()
                                                .exceptionFindingEntity("GrcoCliente"));
        } finally {
            HibernateSessionFactory.closeSession();
        }

        return entity;
    }

    public List<GrcoCliente> findPageGrcoCliente(String sortColumnName,
        boolean sortAscending, int startRow, int maxResults)
        throws Exception {
        List<GrcoCliente> entity = null;

        try {
            entity = XMLHibernateDaoFactory.getInstance().getGrcoClienteDAO()
                                           .findPageGrcoCliente(sortColumnName,
                    sortAscending, startRow, maxResults);
        } catch (Exception e) {
            throw new Exception(ExceptionManager.getInstance()
                                                .exceptionFindingEntity("GrcoCliente"));
        } finally {
            HibernateSessionFactory.closeSession();
        }

        return entity;
    }

    public Long findTotalNumberGrcoCliente() throws Exception {
        Long entity = null;

        try {
            entity = XMLHibernateDaoFactory.getInstance().getGrcoClienteDAO()
                                           .findTotalNumberGrcoCliente();
        } catch (Exception e) {
            throw new Exception(ExceptionManager.getInstance()
                                                .exceptionFindingEntity("GrcoCliente Count"));
        } finally {
            HibernateSessionFactory.closeSession();
        }

        return entity;
    }

    /**
    *
    * @param varibles
    *            este arreglo debera tener:
    *
    * [0] = String variable = (String) varibles[i]; representa como se llama la
    * variable en el pojo
    *
    * [1] = Boolean booVariable = (Boolean) varibles[i + 1]; representa si el
    * valor necesita o no ''(comillas simples)usado para campos de tipo string
    *
    * [2] = Object value = varibles[i + 2]; representa el valor que se va a
    * buscar en la BD
    *
    * [3] = String comparator = (String) varibles[i + 3]; representa que tipo
    * de busqueda voy a hacer.., ejemplo: where nombre=william o where nombre<>william,
        * en este campo iria el tipo de comparador que quiero si es = o <>
            *
            * Se itera de 4 en 4..., entonces 4 registros del arreglo representan 1
            * busqueda en un campo, si se ponen mas pues el continuara buscando en lo
            * que se le ingresen en los otros 4
            *
            *
            * @param variablesBetween
            *
            * la diferencia son estas dos posiciones
            *
            * [0] = String variable = (String) varibles[j]; la variable ne la BD que va
            * a ser buscada en un rango
            *
            * [1] = Object value = varibles[j + 1]; valor 1 para buscar en un rango
            *
            * [2] = Object value2 = varibles[j + 2]; valor 2 para buscar en un rango
            * ejempolo: a > 1 and a < 5 --> 1 seria value y 5 seria value2
                *
                * [3] = String comparator1 = (String) varibles[j + 3]; comparador 1
                * ejemplo: a comparator1 1 and a < 5
                    *
                    * [4] = String comparator2 = (String) varibles[j + 4]; comparador 2
                    * ejemplo: a comparador1>1  and a comparador2<5  (el original: a > 1 and a <
                            * 5) *
                            * @param variablesBetweenDates(en
                            *            este caso solo para mysql)
                            *  [0] = String variable = (String) varibles[k]; el nombre de la variable que hace referencia a
                            *            una fecha
                            *
                            * [1] = Object object1 = varibles[k + 2]; fecha 1 a comparar(deben ser
                            * dates)
                            *
                            * [2] = Object object2 = varibles[k + 3]; fecha 2 a comparar(deben ser
                            * dates)
                            *
                            * esto hace un between entre las dos fechas.
                            *
                            * @return lista con los objetos que se necesiten
                            * @throws Exception
                            */
    public List<GrcoCliente> findByCriteria(Object[] variables,
        Object[] variablesBetween, Object[] variablesBetweenDates)
        throws Exception {
        List<GrcoCliente> list = new ArrayList<GrcoCliente>();
        String where = new String();
        String tempWhere = new String();

        if (variables != null) {
            for (int i = 0; i < variables.length; i++) {
                if ((variables[i] != null) && (variables[i + 1] != null) &&
                        (variables[i + 2] != null) &&
                        (variables[i + 3] != null)) {
                    String variable = (String) variables[i];
                    Boolean booVariable = (Boolean) variables[i + 1];
                    Object value = variables[i + 2];
                    String comparator = (String) variables[i + 3];

                    if (booVariable.booleanValue()) {
                        tempWhere = (tempWhere.length() == 0)
                            ? ("(model." + variable + " " + comparator + " \'" +
                            value + "\' )")
                            : (tempWhere + " AND (model." + variable + " " +
                            comparator + " \'" + value + "\' )");
                    } else {
                        tempWhere = (tempWhere.length() == 0)
                            ? ("(model." + variable + " " + comparator + " " +
                            value + " )")
                            : (tempWhere + " AND (model." + variable + " " +
                            comparator + " " + value + " )");
                    }
                }

                i = i + 3;
            }
        }

        if (variablesBetween != null) {
            for (int j = 0; j < variablesBetween.length; j++) {
                if ((variablesBetween[j] != null) &&
                        (variablesBetween[j + 1] != null) &&
                        (variablesBetween[j + 2] != null) &&
                        (variablesBetween[j + 3] != null) &&
                        (variablesBetween[j + 4] != null)) {
                    String variable = (String) variablesBetween[j];
                    Object value = variablesBetween[j + 1];
                    Object value2 = variablesBetween[j + 2];
                    String comparator1 = (String) variablesBetween[j + 3];
                    String comparator2 = (String) variablesBetween[j + 4];
                    tempWhere = (tempWhere.length() == 0)
                        ? ("(" + value + " " + comparator1 + " " + variable +
                        " and " + variable + " " + comparator2 + " " + value2 +
                        " )")
                        : (tempWhere + " AND (" + value + " " + comparator1 +
                        " " + variable + " and " + variable + " " +
                        comparator2 + " " + value2 + " )");
                }

                j = j + 4;
            }
        }

        if (variablesBetweenDates != null) {
            for (int k = 0; k < variablesBetweenDates.length; k++) {
                if ((variablesBetweenDates[k] != null) &&
                        (variablesBetweenDates[k + 1] != null) &&
                        (variablesBetweenDates[k + 2] != null)) {
                    String variable = (String) variablesBetweenDates[k];
                    Object object1 = variablesBetweenDates[k + 1];
                    Object object2 = variablesBetweenDates[k + 2];
                    String value = null;
                    String value2 = null;

                    try {
                        Date date1 = (Date) object1;
                        Date date2 = (Date) object2;
                        value = Utilities.formatDateWithoutTimeInAStringForBetweenWhere(date1);
                        value2 = Utilities.formatDateWithoutTimeInAStringForBetweenWhere(date2);
                    } catch (Exception e) {
                        list = null;
                        throw e;
                    }

                    tempWhere = (tempWhere.length() == 0)
                        ? ("(model." + variable + " between \'" + value +
                        "\' and \'" + value2 + "\')")
                        : (tempWhere + " AND (model." + variable +
                        " between \'" + value + "\' and \'" + value2 + "\')");
                }

                k = k + 2;
            }
        }

        if (tempWhere.length() == 0) {
            where = null;
        } else {
            where = "(" + tempWhere + ")";
        }

        try {
            list = XMLHibernateDaoFactory.getInstance().getGrcoClienteDAO()
                                         .findByCriteria(where);
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        } finally {
            HibernateSessionFactory.closeSession();
        }

        return list;
    }
}
